package com.example.mqttmanage.domain.firmwareversion;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 固件版本信息表
 */
@TableName(value = "firmwareversion")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FirmwareVersion implements Serializable {
    /**
     * 固件版本记录唯一ID，主键
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 固件名称，如 MyApp_Firmware
     */
    private String firmwareName;

    /**
     * 固件版本号，如 v1.2.3, 2.0.0
     */
    private String versionNumber;

    /**
     * 适用的设备类型，如 sensor, controller, gateway_A
     */
    private String deviceType;

    /**
     * 适用的设备型号（可选，用于更精确的匹配）
     */
    private String deviceModel;

    /**
     * 固件文件原始名称，如 firmware_v1.2.3.bin
     */
    private String fileName;

    /**
     * 固件文件在服务器上的存储路径或对象存储URL
     */
    private String filePath; // 存储 MinIO 返回的完整 URL 或对象键

    /**
     * 固件文件大小，单位字节 (Bytes)
     */
    private Long fileSize;

    /**
     * 固件文件校验和，建议使用SHA256 (64位) 或 SHA512 (128位)，用于下载后校验完整性
     */
    private String checksum;

    /**
     * 版本更新说明，描述本次固件更新的内容
     */
    private String description;

    /**
     * 发布说明，更详细的更新日志或注意事项
     */
    private String releaseNotes;

    /**
     * 固件上传/创建时间
     */
    private Date createTime;

    /**
     * 信息最后更新时间
     */
    private Date updateTime;

    /**
     * 上传者/创建者用户名（可选）
     */
    private String uploadedBy;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}